home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / util / wb / THE.lha / T.H.E. / Prefs / THE next >
Text File  |  2000-04-07  |  42KB  |  1,288 lines

  1. /*
  2.    $VER: RA_THE.rexx 1.4 (7.4.00) Copyright (c) Nils Görs.
  3.  
  4.    Thanks to William Parker for writing AWNP, for teaching me how to
  5.    use it and for the help.
  6.  
  7.    This script is for editing the Tools-Menu and Hotkey functions from Workbench.
  8.  
  9.    The script creates an ARexx-Script that will be placed in WBStartup. You have
  10.    to create an Icon for this script to be executed automatically.
  11.  
  12.    This script needs:
  13.     - AWNPipe: ver 2.42 or newer.
  14.     - workbench.library v44.1414 or newer.
  15. */
  16.  
  17. Scriptname = "Sys:WBStartup/setKeyAndMenu"
  18.  
  19. QuickEnd = "YES"    /* quit T.H.E with [ESC] (YES|NO) */
  20. Horizline = "NO"    /* use horizontal lines? (YES|NO) */
  21.  
  22. mxchars = 256         /* Maximum number of character/digits in argument gadget. */ 
  23. /*
  24. *** Please don't change anything under this line
  25. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  26. options results
  27.  
  28. parse source . . called .
  29. PARSE ARG PubScreen
  30. IF PubScreen = "" THEN PubScreen = "Workbench"
  31.  
  32. ADDRESS workbench
  33.  
  34. call _InitAll()
  35. call BuildGUI()
  36.  
  37. Loop:
  38. do while ~eof(ca)
  39. call topipe('con')
  40. in= readln(ca)
  41.  
  42. /*listviews need five values parsed. For string gadgets you want everything after in2 */
  43. parse var in in1 in2 in3 in4 in5 .
  44. parse var in . . infromstring
  45.     SELECT
  46.         WHEN in1='arexx' then call RxHost()
  47.         WHEN in1='iconify' then call iconify()
  48.         WHEN in1='gadget' then call gadget()
  49.         WHEN in1='menu' then call menu()
  50.         WHEN in1='close' then CALL MYEXIT()
  51.         WHEN in1='key' then call keystroke()
  52.         WHEN in1='cx' then call commodity()
  53.     OTHERWISE
  54.         NOP
  55.     END
  56.  
  57. END
  58. EXIT
  59.  
  60. _InitAll:
  61. IF show('P','T.H.E.') then DO
  62.   address T.H.E. uniconify
  63.   address T.H.E. activate
  64.   exit
  65. END
  66.  
  67. IF ~show('L','rexxsupport.library') THEN
  68. IF ~addlib('rexxsupport.library',0,-30,0) THEN
  69. exit(20)
  70.  
  71. /* Version check */
  72. ca = "THE"
  73. IF SHOWLIST('H', 'AWNPIPE') THEN res=open(ca,"awnpipe:T.H.E./-2042/xc")
  74.     if res ~= 1 then do
  75.         requesterdata='`requestchoice "T.H.E. Error"
  76. "To use this program you need AWNPipe:*n        (Vers 2.42 or newer). " "OK"`'
  77.         CALL ShellResult(requesterdata)
  78.         exit
  79.     end
  80.  
  81. checkversion = '`version workbench.library`'
  82. IF WORD(ShellResult(checkversion),2) < "44.1414" THEN DO
  83.         requesterdata='`requestchoice "T.H.E. Error"
  84.  "To use this program you need OS 3.5*n      (Vers 44.1414 or newer). " "OK"`'
  85.         CALL ShellResult(requesterdata)
  86.         EXIT
  87. END
  88.  
  89.  
  90. /* Init variables */
  91. TRUE  = 1
  92. FALSE = 0
  93. NL = '0a'x
  94. TM_entries = ""
  95. HK_Entries = ""
  96. TM_STRINGNAMEVALUE = ""
  97. TM_STRINGTITLEVALUE = ""
  98. TM_STRINGSHORTCUTVALUE = ""
  99. TM_StringCommandValue    = "rexx:"
  100. TM_StringArgumentValue    = ""
  101.  
  102. HK_StringNameValue = ""
  103. HK_StringHotkeyValue = ""
  104. HK_StringCommandValue    = "rexx:"
  105. HK_StringArgumentValue    = ""
  106.  
  107. HK_counter = 0
  108. TM_counter = 0
  109.  
  110. currentpage = 0
  111.  
  112. Hotkeys = "SHIFT|LSHIFT|RSHIFT|AMIGA|LAMIGA|RAMIGA|ALT|LALT|RALT|ESC|RETURN|DEL|HELP|CTRL|CAPSLOCK|NUMERICPAD|ENTER|BACKSPACE|SPACE|COMMA|UPSTROKE|F1|F2|F3|F4|F5|F6|F7|F8|F10"
  113.  
  114. /*
  115. ** Set current dir
  116. */
  117.  
  118.  PARSE SOURCE . . . progdir .
  119.  
  120.  booll = LENGTH(progdir)
  121.  booli= LASTPOS(":",progdir)
  122.  boolh= LASTPOS("/",progdir)
  123.  
  124.  
  125. IF boolh > booli THEN progdir = SUBSTR(progdir,1,boolh-1)
  126. IF boolh == 0 THEN progdir = SUBSTR(progdir,1,booli)
  127.  
  128. IF RIGHT(progdir,1) ~= ':' THEN progdir2 = progdir||'/'
  129.             ELSE progdir2 = progdir
  130.  
  131.  CALL PRAGMA('D',progdir)
  132.  
  133. /*
  134. ** Read default strings, open locale.library and catalog
  135. */
  136.  
  137. CALL BuildInLanguage                    /* install build-in language */
  138.  
  139. IF ~SHOW('LIBRARIES','locale.library') THEN
  140.    CALL ADDLIB('locale.library',0,-30,0)
  141.  
  142. IF SHOW('LIBRARIES','locale.library') THEN DO
  143.     id='req'pragma('id')                /* get current language */
  144.     address command 'rxset' id '`echo $language`' 
  145.     language=getclip(id)
  146.     call setclip(id,'')
  147.  
  148.    IF language ~= '' THEN DO
  149.     catalog = OPENCATALOG(progdir2'catalogs/'language'/THE.catalog','english',0)
  150.         IF catalog = 0 THEN
  151.         catalog = OPENCATALOG(progdir2'THE.catalog','english',0)
  152.    END
  153.  
  154.    IF catalog = 0 THEN
  155.     catalog = OPENCATALOG('THE.catalog','english',0)
  156. END
  157. RETURN
  158.  
  159. */
  160. /*******************************************************************************
  161. ** Text aus dem Catalog-File auslesen, falls vorhanden
  162. *******************************************************************************/
  163.  
  164. localestring:
  165.    PARSE ARG stringnumber
  166.  
  167.    IF catalog ~= 0 THEN
  168.       RETURN(GETCATALOGSTR(catalog,stringnumber,strings.stringnumber))
  169.    ELSE
  170.       RETURN(strings.stringnumber)
  171.  
  172. /*
  173. ***
  174. */
  175. iconify:
  176. IF ARG(1) ~= "" THEN in2 = ARG(1)
  177. IF in2=1 THEN call topipe('id 0 s 32')        /* iconify   */
  178.      ELSE call topipe('id 0 s 64')        /* uniconify */
  179. RETURN
  180.  
  181. keystroke:
  182. call topipe('id 0 s 256')
  183.     SELECT
  184.         WHEN in2 = 69 THEN IF quickend = "YES" THEN CALL MYEXIT()
  185.         WHEN in2 = 76 | in2 = 62 THEN DO    /* Cursor up,  NUM 8 */
  186.             IF currentpage = 0 THEN lister = TM_ListViewID        /* ToolsMenu or Hotkey Page? */
  187.                 ELSE lister = HK_ListViewID
  188.  
  189.             call topipe('id 'lister 'up')
  190.             IF currentpage = 0 THEN DO                /* ToolsMenu */
  191.             IF tm_entries = "" THEN BREAK                /* no entries! */
  192.  
  193.                 call topipe2('id' TM_ListViewID 'read')
  194.                 tm_currentnode = WORD(in,3)
  195.                 TM_currentCounter = FIND(TM_entries,TM_currentnode)
  196.  
  197.                 IF TM_currentCounter <= 0 THEN DO
  198.                     TM_currentCounter = 1
  199.                     TM_currentNode = WORD(TM_entries,1)
  200.                 END
  201.                 ELSE TM_currentnode = WORD(TM_entries,TM_currentCounter)
  202.  
  203.                 call _DisableTMGads(FALSE)
  204.                 CALL _UpdateTMStrings(TM_currentnode)
  205.             END
  206.             ELSE DO                            /* Hotkey Menu */
  207.             IF hk_entries = "" THEN BREAK                /* no entries! */
  208.                 call topipe2('id' HK_ListViewID 'read')
  209.                 hk_currentnode = WORD(in,3)
  210.  
  211.                 HK_currentCounter=FIND(HK_entries,HK_currentNode)
  212.  
  213.                 IF HK_currentCounter <= 0 THEN DO
  214.                     HK_currentCounter = 1
  215.                     HK_currentNode = WORD(HK_entries,1)
  216.                 END
  217.                 ELSE HK_currentnode = WORD(HK_entries,HK_currentCounter)
  218.                 call _DisableHKGads(FALSE)
  219.                 CALL _UpdateHKStrings(HK_currentnode)
  220.             END
  221.         END
  222.         WHEN in2 = 77 | in2 = 30 THEN DO    /* Cursor down,  NUM 2 */
  223.             IF currentpage = 0 THEN lister = TM_ListViewID        /* ToolsMenu or Hotkey Page? */
  224.                 ELSE lister = HK_ListViewID
  225.  
  226.             call topipe('id 'lister 'down')
  227.             IF currentpage = 0 THEN DO                /* ToolsMenu */
  228.             IF tm_entries = "" THEN BREAK                /* no entries! */
  229.                 call topipe2('id' TM_ListViewID 'read')
  230.                 tm_currentnode = WORD(in,3)
  231.  
  232.                 TM_currentCounter=FIND(TM_entries,TM_currentNode)
  233.                 IF TM_currentCounter <= 0 THEN DO
  234.                     TM_currentCounter = 1
  235.                     TM_currentNode = WORD(TM_entries,1)
  236.                 END
  237.                 ELSE DO
  238.                     TM_currentnode = WORD(TM_entries,TM_currentCounter)
  239.                     IF TM_Name.TM_currentnode = "TM_NAME." THEN DO
  240.                         TM_currentCounter = TM_currentCounter -1
  241.                         TM_currentnode = WORD(TM_entries,TM_currentCounter)
  242.                     END
  243.                 END
  244.                 call _DisableTMGads(FALSE)
  245.                 CALL _UpdateTMStrings(TM_currentnode)
  246.             END
  247.             ELSE DO                            /* Hotkey Menu */
  248.             IF hk_entries = "" THEN BREAK                /* no entries! */
  249.                 call topipe2('id' hk_ListViewID 'read')
  250.                 hk_currentnode = WORD(in,3)
  251.                 HK_currentCounter=FIND(HK_entries,hk_currentNode)
  252.  
  253.                 IF HK_currentCounter <= 0 THEN DO
  254.                     HK_currentCounter = 1
  255.                     HK_currentNode = WORD(HK_entries,1)
  256.                 END
  257.                 ELSE DO
  258.                     HK_currentnode = WORD(HK_entries,HK_currentCounter)
  259.                     IF HK_Name.HK_currentnode = "HK_NAME." THEN DO
  260.                         HK_currentCounter = HK_currentCounter -1
  261.                         HK_currentnode = WORD(HK_entries,HK_currentCounter)
  262.                     END
  263.  
  264.                 END
  265.                 call _DisableHKGads(FALSE)
  266.                 CALL _UpdateHKStrings(HK_currentnode)
  267.             END
  268.         END
  269.         WHEN in2 = 66 THEN DO        /* TAB */
  270.             currentpage=bitxor('1'x,currentpage)
  271.             call topipe('id' pageid 's' currentpage 'refresh')
  272.         END
  273.  
  274.         WHEN in2 = 61 THEN DO        /* Home */
  275.             IF currentpage = 0 THEN DO
  276.                 lister = TM_ListViewID        /* ToolsMenu or Hotkey Page? */
  277.                 call topipe2('id' TM_ListViewID 'read')
  278.                 check = WORD(in,3)
  279.                 LPos=WORD(tm_entries,1)
  280.                 IF Lpos ~= check THEN DO
  281.                     call _DisableTMGads(FALSE)
  282.                     CALL _UpdateTMStrings(LPos)
  283.                     call topipe('id' lister 's' lpos)
  284.                     TM_currentnode = LPos
  285.                 END
  286.             END
  287.             ELSE DO
  288.                 lister = HK_ListViewID
  289.                 call topipe2('id' HK_ListViewID 'read')
  290.                 check = WORD(in,3)
  291.                 LPos=WORD(hk_entries,1)
  292.                 IF Lpos ~= check THEN DO
  293.                     call _DisableHKGads(FALSE)
  294.                     CALL _UpdateHKStrings(LPos)
  295.                     call topipe('id' lister 's' lpos)
  296.                     HK_currentnode = LPos
  297.                 END
  298.             END
  299.         END
  300.  
  301.         WHEN in2 = 29 THEN DO        /* End */
  302.             IF currentpage = 0 THEN DO
  303.                 call topipe2('id' TM_ListViewID 'read')
  304.                 check = WORD(in,3)
  305.                 lister = TM_ListViewID        /* ToolsMenu or Hotkey Page? */
  306.                 LPos=WORD(tm_entries,WORDS(tm_entries))
  307.                 IF Lpos ~= check THEN DO
  308.                     call _DisableTMGads(FALSE)
  309.                     CALL _UpdateTMStrings(LPos)
  310.                     call topipe('id' lister 's' lpos)
  311.                     TM_currentnode = LPos
  312.                 END
  313.             END
  314.             ELSE DO
  315.                 lister = HK_ListViewID
  316.                 call topipe2('id' HK_ListViewID 'read')
  317.                 check = WORD(in,3)
  318.                 LPos=WORD(hk_entries,WORDS(hk_entries))
  319.                 IF Lpos ~= check THEN DO
  320.                     call _DisableHKGads(FALSE)
  321.                     CALL _UpdateHKStrings(LPos)
  322.                     call topipe('id' lister 's' lpos)
  323.                     HK_currentnode = LPos
  324.                 END
  325.             END
  326.         END
  327.  
  328.     OTHERWISE
  329.         NOP
  330.     END
  331. call topipe('id 0 s 512')
  332. RETURN
  333.  
  334. menu:
  335. SELECT
  336.     WHEN in2 = 0 & in3 = 0 THEN DO
  337.         call topipe('id 0 s 256')
  338.         requesterdata='`requestchoice "RA_THEinfo" "RA_THE.rexx 1.4 (7.4.00)*n© by Nils Görs*n<nils@goers.line.org>*n*nGUI build with AWNPipe*n© by William Parker*n<bill@amitrix.com>" "OK"`'
  339.         CALL ShellResult(requesterdata)
  340.         call topipe('id 0 s 512')
  341.     END
  342.     WHEN in2 = 0 & in3 = 2 THEN DO
  343.         call topipe('id 0 s 256')
  344.         requesterdata='`requestchoice "T.H.E." "'localestring(MSG_Request_Quit)'" "'localestring(MSG_Request_Yes)'" PUBSCREEN='pubscreen'`'
  345.         IF ShellResult(requesterdata) = 1 THEN CALL MYEXIT
  346.         call topipe('id 0 s 512')
  347.     END
  348.  
  349.     WHEN in2 = 1 & in3 = 0 THEN DO
  350.     IF currentpage = 0 THEN call _DisableTMGads(TRUE)
  351.             ELSE call _DisableHKGads(TRUE)
  352.  
  353.         call topipe('id 0 s 256')
  354.         IF currentpage = 1 THEN DO
  355.             IF hk_counter >0 THEN DO
  356.                 call topipe('id' HK_ListviewID 'removenode')
  357.                 CALL HKClearStrings()
  358.                 hk_entries = ""
  359.                 hk_counter = 0
  360.             END
  361.         END
  362.         ELSE DO
  363.             IF tm_counter >0 THEN DO
  364.                 call topipe('id' TM_ListviewID 'removenode')
  365.                 CALL TMClearStrings()
  366.                 tm_entries = ""
  367.                 tm_counter = 0
  368.             END
  369.         END
  370.         call topipe('id 0 s 512')
  371.     END
  372.  
  373.     WHEN in2 = 1 & in3 = 1 THEN DO            /* last saved */
  374.     call topipe('id 0 s 256')
  375.         IF currentpage = 0 THEN DO
  376.             call _DisableTMGads(TRUE)
  377.             call _UpdateTMStrings(TM_currentnode)
  378.             call topipe('id' TM_ListviewID 'removenode')
  379.             tm_entries = ""
  380.             tm_counter = 0
  381.             call topipe('id' TM_ListviewID 'Selected=0')    /* Disable selected entry */
  382.             TM_currentNode = 0                /* Set pointer to first list entry */
  383.  
  384.             call GetToolsMenu()
  385.         END
  386.         ELSE DO
  387.             call _DisableHKGads(TRUE)
  388.             call _UpdateHKStrings(HK_currentnode)
  389.             call topipe('id' HK_ListviewID 'removenode')
  390.             hk_entries = ""
  391.             hk_counter = 0
  392.             call topipe('id' HK_ListviewID 'Selected=0')    /* Disable selected entry */
  393.             HK_currentNode = 0                /* Set pointer to first list entry */
  394.  
  395.             call GetHotkeys()
  396.         END
  397.     call topipe('id 0 s 512')
  398.     END
  399.     OTHERWISE
  400.         NOP
  401. END
  402. RETURN
  403.  
  404. Gadget:
  405. SELECT
  406. /*
  407. *** ListView
  408. */
  409.     WHEN in2 = pageid THEN currentpage = in3
  410.  
  411.     WHEN in2 = TM_ListViewID  THEN DO
  412.         TM_currentnode=in5    /* remember the curently selected node for future use...*/
  413.         CALL _DisableTMGads(FALSE)
  414.         CALL _UpdateTMStrings(in5)
  415.     END
  416.  
  417.     WHEN in2 = HK_ListViewID  THEN DO
  418.         HK_currentnode=in5    /* remember the curently selected node for future use...*/
  419.         IF FIND(HK_entries,HK_currentnode) = 0 THEN RETURN
  420.  
  421.         IF HK_Key.in5 = "" THEN HK_HotkeyValue = ""
  422.                 ELSE HK_HotkeyValue = HK_Key.in5
  423.  
  424.         call _DisableHKGads(FALSE)
  425.         CALL _UpdateHKStrings(in5)
  426.     END
  427.  
  428. /*
  429. *** ToolsMenu Gadgets
  430. */
  431.     WHEN in2 = TM_AddID THEN DO
  432.         IF TM_Counter = 62 THEN DO
  433.             call topipe('id 0 s 256')
  434.             requesterdata='`requestchoice "T.H.E." "'localestring(MSG_TooManyEntries)'" "Ok!" PUBSCREEN='pubscreen'`'
  435.             CALL ShellResult(requesterdata)
  436.             call topipe('id 0 s 512')
  437.             RETURN
  438.         END
  439.         currentPos=FIND(TM_entries,TM_currentnode)
  440.         currentPos.bak = currentPos
  441.  
  442.         IF currentpos ~= 0 THEN tarGID= WORD(tm_entries,currentpos.bak)
  443.                     ELSE tarGID = -1
  444.  
  445.         Node_ID = topipe('tar='tarGID 'id 'TM_ListViewID 'addnode gt "'localestring(MSG_New_Name)'|'localestring(MSG_New_Title)'||rexx:" page 'pageid)
  446.  
  447.         TM_name.Node_ID = localestring(MSG_New_Name)
  448.         TM_title.Node_ID = localestring(MSG_New_Title)
  449.         TM_Shortcut.Node_ID = ""
  450.         mt_Command = "rexx:"
  451.         mt_Args = ""
  452.         call parseTMArgs()            /* write command and args */
  453.  
  454.         TM_CURRENTNODE=Node_ID
  455.  
  456.         IF currentPos ~= 0 & currentPos < TM_counter THEN DO
  457.             currentPos = WORDINDEX(TM_entries,currentpos+1)-1    /* next entry and char back */
  458.             tm_entries = INSERT(TM_currentnode||" ",tm_entries,currentPos)
  459.         END
  460.         ELSE TM_Entries = TM_Entries Node_ID        /* add GID to TM_entries */
  461.  
  462.         TM_counter = TM_counter + 1        /* one more entry in list! */
  463.  
  464.         call topipe2('id 'TM_ListViewID' s 'TM_CURRENTNODE)
  465.         CALL _DisableTMGads(FALSE)
  466.         CALL _UpdateTMStrings(TM_CURRENTNODE)
  467.  
  468. /*
  469.         call topipe('id 'TM_StringNameID' s=0') /* auto activation forces system-crash */
  470. */
  471.     END
  472.  
  473.     WHEN in2 = TM_RemoveID THEN DO
  474.     IF TM_currentnode = "TM_CURRENTNODE" THEN RETURN
  475.         IF topipe2('id 'TM_currentnode' address') = 0 THEN RETURN    /* check if GID exists */
  476.  
  477.         CALL _DisableTMGads(TRUE)
  478.         CALL topipe('id' TM_currentnode 'removenode')
  479.         CALL TMClearStrings()
  480.  
  481.         TM_counter = TM_counter - 1
  482.         TM_entries = DELWORD(TM_entries,FIND(TM_entries,TM_currentnode),1)
  483.     END
  484.  
  485.     WHEN in2 = TM_CloneID THEN DO
  486.         IF TM_Counter = 62 THEN DO
  487.             call topipe('id 0 s 256')
  488.             requesterdata='`requestchoice "T.H.E." "'localestring(MSG_TooManyEntries)'" "Ok!" PUBSCREEN='pubscreen'`'
  489.             CALL ShellResult(requesterdata)
  490.             call topipe('id 0 s 512')
  491.             RETURN
  492.         END
  493.  
  494.         IF TM_currentnode = "TM_CURRENTNODE" THEN RETURN        /* no selected enty */
  495.         IF topipe2('id 'TM_currentnode' address') = 0 THEN RETURN    /* check if GID exists */
  496.  
  497.         currentPos=FIND(TM_entries,TM_currentnode)
  498.  
  499.         tarGID = WORD(tm_entries,FIND(TM_entries,TM_currentnode))
  500.  
  501.         TM_CommandArgs = STRIP(TM_Command.tarGID TM_Args.tarGID)
  502.  
  503.         Node_ID = topipe('tar='tarGID 'id 'TM_ListViewID 'addnode gt "'TM_name.tarGID'|'TM_title.tarGID'|'TM_Shortcut.tarGID'|'TM_CommandArgs '"page 'pageid)
  504.  
  505.         TM_name.Node_ID = TM_name.tarGID
  506.         TM_title.Node_ID = TM_title.tarGID
  507.         TM_Shortcut.Node_ID = TM_Shortcut.tarGID
  508.         TM_Command.Node_ID = TM_Command.tarGID
  509.         TM_Args.Node_ID = TM_Args.tarGID
  510.  
  511.         TM_CURRENTNODE=Node_ID
  512.  
  513.         IF currentPos ~= 0 & currentPos < TM_counter THEN DO
  514.             currentPos = WORDINDEX(TM_entries,currentpos+1)-1    /* next entry and char back */
  515.             tm_entries = INSERT(TM_currentnode||" ",tm_entries,currentPos)
  516.         END
  517.         ELSE TM_Entries = TM_Entries Node_ID        /* add GID to TM_entries */
  518.  
  519.         TM_counter = TM_counter + 1        /* one more entry in list! */
  520.  
  521.         call topipe2('id 'TM_ListViewID' s 'TM_CURRENTNODE)
  522.         CALL _UpdateTMStrings(TM_CURRENTNODE)
  523.  
  524.     END
  525.  
  526.     WHEN in2 = TM_UpID THEN DO
  527.         IF TM_CURRENTNODE = "TM_CURRENTNODE" THEN RETURN
  528.         IF topipe2('id 'TM_currentnode' address') = 0 THEN RETURN    /* check if GID exists */
  529.  
  530.         currentPos = FIND(TM_entries,TM_currentnode)
  531.         prevEntry = WORD(TM_entries,currentPos-1)     /* get previous entry */
  532.         IF prevEntry = "" THEN RETURN            /* Top of list */
  533.  
  534.         CALL swapTM
  535.  
  536.         TM_CURRENTNODE = prevEntry
  537.  
  538.         call topipe2('id 'TM_ListViewID' s 'TM_CURRENTNODE)
  539.         CALL _UpdateTMStrings(TM_currentnode)
  540.  
  541.     END
  542.  
  543.     WHEN in2 = TM_DownID THEN DO
  544.         IF TM_CURRENTNODE = "TM_CURRENTNODE" THEN RETURN
  545.         IF topipe2('id 'TM_currentnode' address') = 0 THEN RETURN    /* check if GID exists */
  546.  
  547.         currentPos = FIND(TM_entries,TM_currentnode)
  548.         prevEntry = WORD(TM_entries,currentPos+1)     /* get previous entry */
  549.         IF prevEntry = "" THEN RETURN            /* Top of list */
  550.         CALL swapTM
  551.         TM_CURRENTNODE = prevEntry
  552.         call topipe2('id 'TM_ListViewID' s 'TM_CURRENTNODE)
  553.         CALL _UpdateTMStrings(TM_currentnode)
  554.     END
  555.  
  556.  
  557. /*
  558. *** get StringGadget value for Tools-Menu
  559. */
  560.     WHEN in2 = TM_StringNameID THEN DO
  561.         IF TM_currentnode = "TM_CURRENTNODE" THEN TM_currentnode = -1
  562.         TM_StringNameValue = DELWORD(in,1,2)
  563.  
  564.         IF TM_Args.TM_currentnode ~= "" THEN commandArgs = TM_Command.TM_currentnode TM_Args.TM_currentnode
  565.                         ELSE commandArgs = TM_Command.TM_currentnode||TM_Args.TM_currentnode
  566.  
  567.         IF topipe2('id 'TM_currentnode' address') ~= 0 THEN    /* check if GID exists */
  568.             call topipe('id 'TM_currentnode' gt "'TM_StringNameValue'|'TM_title.TM_currentnode'|'TM_ShortCut.TM_currentnode'|'commandArgs'"')
  569.             TM_Name.TM_currentnode = TM_StringNameValue
  570.     END
  571.     WHEN in2 = TM_StringTitleID THEN DO
  572.         IF TM_currentnode = "TM_CURRENTNODE" THEN TM_currentnode = -1
  573.         TM_StringTitleValue = DELWORD(in,1,2)
  574.         IF TM_Args.TM_currentnode ~= "" THEN commandArgs = TM_Command.TM_currentnode TM_Args.TM_currentnode
  575.                         ELSE commandArgs = TM_Command.TM_currentnode||TM_Args.TM_currentnode
  576.         IF topipe2('id 'TM_currentnode' address') ~= 0 THEN    /* check if GID exists */
  577.             call topipe('id 'TM_currentnode' gt "'TM_Name.TM_currentnode'|'TM_StringTitleValue'|'TM_ShortCut.TM_currentnode'|'commandArgs'"')
  578.             TM_Title.TM_currentnode = TM_StringTitleValue
  579.     END
  580.     WHEN in2 = TM_StringShortcutID THEN DO
  581.         IF TM_currentnode = "TM_CURRENTNODE" THEN TM_currentnode = -1
  582.         IF in3 = '"' THEN in3 = ""        /* don't except " as Shortcut! */
  583. /*
  584.         IF LENGTH(in3) > 0 THEN in3 = LEFT(in3,1)
  585.                     ELSE in3 = ""
  586. */
  587.         TM_StringShortcutValue = in3
  588.         IF TM_Args.TM_currentnode ~= "" THEN commandArgs = TM_Command.TM_currentnode TM_Args.TM_currentnode
  589.                         ELSE commandArgs = TM_Command.TM_currentnode||TM_Args.TM_currentnode
  590.         IF topipe2('id 'TM_currentnode' address') ~= 0 THEN    /* check if GID exists */
  591.             call topipe('id 'TM_currentnode' gt "'TM_Name.TM_currentnode'|'TM_title.TM_currentnode'|'TM_StringShortCutValue'|'commandArgs'"')
  592.             call topipe('id 'TM_StringShortCutID 'gt "'TM_StringShortcutValue'" ref')
  593.             TM_ShortCut.TM_currentnode = TM_StringShortCutValue
  594.     END
  595.     WHEN in2 = TM_GetFileID THEN DO
  596.         IF TM_currentnode = "TM_CURRENTNODE" THEN TM_currentnode = -1
  597.         TM_StringCommandValue = STRIP(COMPRESS(DELWORD(in,1,3),'"'))
  598.         IF TM_Args.TM_currentnode ~= "" THEN commandArgs = TM_StringCommandValue TM_Args.TM_currentnode
  599.                         ELSE commandArgs = TM_StringCommandValue||TM_Args.TM_currentnode
  600.         IF topipe2('id 'TM_currentnode' address') ~= 0 THEN    /* check if GID exists */
  601.             call topipe('id 'TM_currentnode' gt "'TM_Name.TM_currentnode'|'TM_title.TM_currentnode'|'TM_ShortCut.TM_currentnode'|'commandArgs'"')
  602.             TM_Command.TM_currentnode = TM_StringCommandValue
  603.     END
  604.     WHEN in2 = TM_StringArgsID THEN DO
  605.         IF TM_currentnode = "TM_CURRENTNODE" THEN TM_currentnode = -1
  606.         TM_StringArgsValue = STRIP(COMPRESS(DELWORD(in,1,2),'"'))
  607.         IF TM_StringArgsValue ~= "" THEN commandArgs = TM_Command.TM_currentnode TM_StringArgsValue
  608.                         ELSE commandArgs = TM_Command.TM_currentnode||TM_StringArgsValue
  609.         IF topipe2('id 'TM_currentnode' address') ~= 0 THEN    /* check if GID exists */
  610.             call topipe('id 'TM_currentnode' gt "'TM_Name.TM_currentnode'|'TM_title.TM_currentnode'|'TM_ShortCut.TM_currentnode'|'commandArgs'"')
  611.             TM_Args.TM_currentnode = TM_StringArgsValue
  612.     END
  613.  
  614. /*
  615. *** Hotkey Gadgets
  616. */
  617.     WHEN in2 = HK_AddID THEN DO
  618.         Node_ID = topipe('id 'HK_ListViewID 'addnode gt "'localestring(MSG_New_Name)'|'localestring(MSG_New_Hotkey)'|rexx:" page 'pageid)
  619.  
  620.         hk_Name = localestring(MSG_New_Name)
  621.         hk_key = ""
  622.         hk_Command = "rexx:"
  623.         CALL WriteHKStem()
  624.         HK_CURRENTNODE=Node_ID
  625.         call topipe2('id 'HK_ListViewID' s 'HK_CURRENTNODE)
  626.  
  627.         call _DisableHKGads(FALSE)
  628.         CALL _UpdateHKStrings(HK_CURRENTNODE)
  629.         IF HK_Key.HK_CURRENTNODE = "" THEN HK_HotkeyValue = ""
  630.                 ELSE HK_HotkeyValue = HK_Key.HK_CURRENTNODE
  631. /*
  632.         call topipe('id 'HK_StringNameID' s=0') /* auto activation forces system-crash */
  633. */
  634.     END
  635.  
  636.     WHEN in2 = HK_CloneID THEN DO
  637.         IF HK_currentnode = "HK_CURRENTNODE" THEN RETURN        /* no selected enty */
  638.         IF topipe2('id 'HK_currentnode' address') = 0 THEN RETURN    /* check if GID exists */
  639.  
  640.         currentPos=FIND(HK_entries,HK_currentnode)
  641.  
  642.         tarGID = word(HK_entries,FIND(HK_entries,HK_currentnode))
  643.  
  644.         HK_CommandArgs = STRIP(HK_Command.tarGID HK_Args.tarGID)
  645.  
  646.         Node_ID = topipe('tar='tarGID 'id 'HK_ListViewID 'addnode gt "'HK_name.tarGID'|'HK_key.tarGID'|'HK_CommandArgs '"page 'pageid)
  647.  
  648.         HK_name.Node_ID = HK_name.tarGID
  649.         HK_key.Node_ID = HK_Key.tarGID
  650.         HK_Command.Node_ID = HK_Command.tarGID
  651.         HK_Args.Node_ID = HK_Args.tarGID
  652.  
  653.         HK_CURRENTNODE=Node_ID
  654.         IF currentPos ~= 0 & currentPos < HK_counter THEN DO
  655.             currentPos = WORDINDEX(HK_entries,currentpos+1)-1    /* next entry and char back */
  656.             HK_entries = INSERT(HK_currentnode||" ",HK_entries,currentPos)
  657.         END
  658.         ELSE HK_Entries = HK_Entries Node_ID        /* add GID to HK_entries */
  659.  
  660.         HK_counter = HK_counter + 1        /* one more entry in list! */
  661.  
  662.         call topipe2('id 'HK_ListViewID' s 'HK_CURRENTNODE)
  663.         CALL _UpdateHKStrings(HK_CURRENTNODE)
  664.  
  665.     END
  666.  
  667.     WHEN in2 = HK_RemoveID THEN DO
  668.     IF HK_currentnode = "HK_CURRENTNODE" THEN RETURN
  669.         IF topipe2('id 'HK_currentnode' address') = 0 THEN RETURN    /* check if GID exists */
  670.         CALL topipe('id' HK_currentnode 'removenode')
  671.         call _DisableHKGads(TRUE)
  672.         CALL HKClearStrings()
  673.  
  674.         HK_counter = HK_counter - 1
  675.         HK_entries = DELWORD(HK_entries,FIND(HK_entries,HK_currentnode),1)
  676.     END
  677.  
  678. /*
  679. *** get Stringgadget value for Hotkeys
  680. */
  681.     WHEN in2 = HK_StringNameID THEN DO
  682.         IF HK_currentnode = "HK_CURRENTNODE" THEN HK_currentnode = -1
  683.         HK_StringNameValue = DELWORD(in,1,2)
  684.         IF HK_Args.HK_currentnode ~= "" THEN commandArgs = HK_Command.HK_currentnode HK_Args.HK_currentnode
  685.                         ELSE commandArgs = HK_Command.HK_currentnode||HK_Args.HK_currentnode
  686.         IF topipe2('id 'HK_currentnode' address') ~= 0 THEN    /* check if GID exists */
  687.             call topipe('id 'HK_currentnode' gt "'HK_StringNameValue'|'HK_Key.HK_currentnode'|'commandArgs'"')
  688.         HK_Name.HK_currentnode = HK_StringNameValue
  689.     END
  690.  
  691.     WHEN in2 = HK_CancelBoxID THEN DO
  692.         IF HK_currentnode = "HK_CURRENTNODE" THEN HK_currentnode = -1
  693.  
  694.         call topipe('id 'HK_StringHotKeyID 'gt "" ref')
  695.  
  696.         IF topipe2('id 'HK_currentnode' address') ~= 0 THEN DO/* check if GID exists */
  697.             call topipe('id 'HK_currentnode' gt "'HK_name.HK_currentnode'|""|'commandArgs'"')
  698.             HK_Key.HK_currentnode = ""
  699.         END
  700.         HK_StringHotkeyValue = ""
  701.     END
  702.  
  703.     WHEN in2 = HK_StringHotKeyID THEN DO
  704.     in3 = DELWORD(in,1,2)
  705.         IF HK_currentnode = "HK_CURRENTNODE" THEN HK_currentnode = -1
  706.         IF in3 = "" THEN HK_StringHotkeyValue = ""
  707.                 ELSE HK_StringHotkeyValue = in3
  708.         IF HK_Args.HK_currentnode ~= "" THEN commandArgs = HK_Command.HK_currentnode HK_Args.HK_currentnode
  709.                         ELSE commandArgs = HK_Command.HK_currentnode||HK_Args.HK_currentnode
  710.         call topipe('id 'HK_StringHotKeyID' gt "'HK_StringHotkeyValue'" ref')
  711.         IF topipe2('id 'HK_currentnode' address') ~= 0 THEN /* check if GID exists */
  712.             call topipe('id 'HK_currentnode' gt "'HK_name.HK_currentnode'|'HK_StringHotkeyValue'|'commandArgs'"')
  713.  
  714.         HK_Key.HK_currentnode = HK_StringHotKeyValue
  715.     END
  716.  
  717.     WHEN in2 = HK_chooserID THEN DO
  718.         addHotkey = WORD(TRANSLATE(Hotkeys," ","|"),in3+1)
  719.         IF HK_currentnode ~= "HK_CURRENTNODE" & HK_currentnode ~= -1 THEN HK_StringHotkeyValue = HK_Key.HK_currentnode
  720.                             ELSE HK_CURRENTNODE = -1
  721.  
  722.         IF HK_StringHotkeyValue = "" THEN HK_StringHotkeyValue = addhotkey
  723.                   ELSE HK_StringHotkeyValue = HK_StringHotkeyValue ||" "|| addHotkey
  724.  
  725.         IF HK_Args.HK_currentnode ~= "" THEN commandArgs = HK_Command.HK_currentnode HK_Args.HK_currentnode
  726.                         ELSE commandArgs = HK_Command.HK_currentnode||HK_Args.HK_currentnode
  727.  
  728.         call topipe('id 'HK_StringHotKeyID 'gt "'HK_StringHotkeyValue'"')
  729.  
  730.         IF topipe2('id 'HK_currentnode' address') ~= 0 THEN    /* check if GID exists */
  731.             call topipe('id 'HK_currentnode' gt "'HK_Name.HK_currentnode'|'HK_StringHotkeyValue'|'commandArgs'"')
  732.             HK_Key.HK_currentnode = HK_StringHotKeyValue
  733.     END
  734.  
  735.     WHEN in2 = HK_GetFileID THEN DO
  736.         IF HK_currentnode = "HK_CURRENTNODE" THEN HK_currentnode = -1
  737.         HK_StringCommandValue = STRIP(COMPRESS(DELWORD(in,1,3),'"'))
  738.         IF HK_Args.HK_currentnode ~= "" THEN commandArgs = HK_StringCommandValue HK_Args.HK_currentnode
  739.                         ELSE commandArgs = HK_StringCommandValue||HK_Args.HK_currentnode
  740.         IF topipe2('id 'HK_currentnode' address') ~= 0 THEN    /* check if GID exists */
  741.             call topipe('id 'HK_currentnode' gt "'HK_Name.HK_currentnode'|'HK_Key.HK_currentnode'|'commandArgs'"')
  742.             HK_Command.HK_currentnode = HK_StringCommandValue
  743.     END
  744.     WHEN in2 = HK_StringArgsID THEN DO
  745.         IF HK_currentnode = "HK_CURRENTNODE" THEN HK_currentnode = -1
  746.         HK_StringArgsValue = STRIP(COMPRESS(DELWORD(in,1,2),'"'))
  747.         IF HK_StringArgsValue ~= "" THEN commandArgs = HK_Command.HK_currentnode HK_StringArgsValue
  748.                         ELSE commandArgs = HK_Command.HK_currentnode||HK_StringArgsValue
  749.         IF topipe2('id 'HK_currentnode' address') ~= 0 THEN    /* check if GID exists */
  750.             call topipe('id 'HK_currentnode' gt "'HK_Name.HK_currentnode'|'HK_Key.HK_currentnode'|'commandArgs'"')
  751.             HK_Args.HK_currentnode = HK_StringArgsValue
  752.     END
  753. /*
  754. *** Save|Use|Cancel gadgets
  755. */
  756.     WHEN in2 = TM_SaveID | in2 = HK_SaveID THEN DO
  757.         CALL _Save
  758.         CALL _RemoveMenuHotkeys
  759.         RX scriptname
  760.         CALL MYEXIT
  761.     END
  762.     WHEN in2 = TM_UseID | in2 = HK_UseID THEN DO
  763.         CALL _RemoveMenuHotkeys
  764.         Scriptname.bak = Scriptname
  765.         Scriptname = "t:myscript"
  766.         CALL _Save
  767.         RX scriptname
  768.         IF exists(scriptname) THEN DELETE scriptname
  769.         Scriptname = Scriptname.bak
  770.         CALL MYEXIT
  771.     END
  772.  
  773.     WHEN in2 = TM_CancelID | in2 = HK_CancelID THEN CALL MYEXIT()
  774.  
  775. OTHERWISE
  776. NOP
  777. END
  778. return
  779.  
  780. BuildGUI:
  781. /* define window */
  782. call topipe('Title="'localestring(MSG_TitleName)'" st="Workbench Screen" Icontitle=THE iconifygadget sendkeys defaultgadgets modify verticaly SpaceInner SpaceOuter topleft activate ii "'called'" pubscreen='pubscreen)
  783.  
  784. call topipe('ARexx gt "T.H.E.|uniconify|iconify|quit|activate|front|back"')
  785.  
  786. /* define the menues */
  787. call topipe('menu gt "'localestring(MSG_MenuT_Project)'|'localestring(MSG_Menu_About)'|-|'localestring(MSG_Menu_Quit)'"')
  788. call topipe('menu gt "'localestring(MSG_MenuT_Edit)'|'localestring(MSG_Menu_Remove)'|'localestring(MSG_Menu_LastSaved)'"')
  789.  
  790. /* define the gadgets*/
  791. pageid = topipe('clicktab ctl "'localestring(MSG_MAIN_ToolsMenu)'|'localestring(MSG_MAIN_HotkeyMenu)'"')
  792.  
  793. call topipe('layout b=0 v page' pageid)
  794. call topipe('layout si so b=7 gt="'localestring(MSG_TM_ToolsMenu)'"')
  795. IF horizLine = "YES" THEN TM_ListViewID = topipe('listbrowser lbl="'localestring(MSG_TM_LV_Title)'" arrows h v minh=120 minw=300 showtitles')
  796.              ELSE TM_ListViewID = topipe('listbrowser lbl="'localestring(MSG_TM_LV_Title)'" arrows v  minh=120 minw=300 showtitles')
  797.  
  798. call topipe(le)
  799.  
  800. call topipe('layout hori so b=0 weih=0')
  801. TM_AddID = topipe('button gt "'localestring(MSG_Button_Add)'"')
  802. TM_RemoveID = topipe('button gt "'localestring(MSG_Button_Remove)'" dis=1')
  803. TM_CloneID = topipe('button gt "'localestring(MSG_Button_Clone)'" dis=1')
  804. TM_UpID = topipe('button gt "'localestring(MSG_Button_Up)'" dis=1')
  805. TM_DownID = topipe('button gt "'localestring(MSG_Button_Down)'" dis=1')
  806. call topipe(le)
  807.  
  808. call topipe('layout v si so weih 0')
  809. call topipe('label gt "'localestring(MSG_String_Name)'" ua')
  810. TM_StringNameID = topipe('string chl lj tc dis=1')
  811. call topipe('label gt "'localestring(MSG_String_Title)'" ua')
  812. TM_StringTitleID = topipe('string chl lj tc dis=1')
  813. call topipe('label gt "'localestring(MSG_String_ShortCut)'" ua')
  814. TM_StringShortCutID = topipe('string chl lj tc maxchars=2 dis=1')
  815. call topipe('label gt "'localestring(MSG_String_Command)'" ua')
  816. TM_GetFileID = topipe('getfile chl fn "rexx:" dis=1')
  817. call topipe('label gt "'localestring(MSG_String_Argument)'" ua')
  818. TM_StringArgsID = topipe('string chl lj tc dis=1 maxchars='mxchars)
  819. call topipe(le)
  820.  
  821. call topipe('layout b=0 v si so weih 0')
  822. call topipe('button b=7 minh 2')
  823. call topipe('layout b=0 h si so weih 0')
  824. TM_SaveID = topipe('button weiw 0 gt "'localestring(MSG_Button_Save)'"')
  825. call topipe('space')
  826. TM_UseID = topipe('button weiw 0 gt "'localestring(MSG_Button_Use)'"')
  827. call topipe('space')
  828. TM_CancelID = topipe('button weiw 0 gt "'localestring(MSG_Button_Cancel)'"')
  829. call topipe(le)
  830. call topipe(le)
  831. call topipe(le)
  832.  
  833. call topipe('layout b 0 v page' pageid)
  834. call topipe('layout si so b=7 gt="'localestring(MSG_HK_Hotkey)'"')
  835. IF horizLine = "YES" THEN HK_ListViewID = topipe('listbrowser lbl="'localestring(MSG_HK_LV_Title)'" arrows h v minh=120 minw=300 showtitles')
  836.              ELSE HK_ListViewID = topipe('listbrowser lbl="'localestring(MSG_HK_LV_Title)'" arrows v minh=120 minw=300 showtitles')
  837. call topipe(le)
  838.  
  839. call topipe('layout hori so b=0 weih=0')
  840. HK_AddID = topipe('button gt "'localestring(MSG_Button_Add)'"')
  841. call topipe('space')
  842. HK_CloneID = topipe('button gt "'localestring(MSG_Button_Clone)'" dis=1')
  843. call topipe('space')
  844. HK_RemoveID = topipe('button gt "'localestring(MSG_Button_Remove)'" dis=1')
  845. call topipe(le)
  846.  
  847. call topipe('layout v si so weih 0')
  848. call topipe('label gt "'localestring(MSG_String_Name)'" ua')
  849. HK_StringNameID = topipe('string chl lj tc dis=1')
  850. call topipe('label gt "'localestring(MSG_String_HotKey)'" ua')
  851. call topipe('layout chl bj b=0')
  852. HK_StringHotKeyID = topipe('string chl lj tc dis=1')
  853. HK_CancelBoxID = topipe('button autobutton=4 weiw=0 dis=1')
  854. HK_ChooserID = topipe('chooser chl lj maxn=31 dis=1 cl='hotkeys)
  855. call topipe('le')
  856. call topipe('label gt "'localestring(MSG_String_Command)'" ua')
  857. HK_GetFileID = topipe('getfile chl fn "rexx:" dis=1')
  858. call topipe('label gt "'localestring(MSG_String_Argument)'" ua')
  859. HK_StringArgsID = topipe('string chl lj tc dis=1 maxchars='mxchars)
  860. call topipe(le)
  861.  
  862. call topipe('layout b=0 v si so weih 0')
  863. call topipe('button b=7 minh 2')
  864. call topipe('layout b=0 h si so weih 0')
  865. HK_SaveID = topipe('button weiw 0 gt "'localestring(MSG_Button_Save)'"')
  866. call topipe('space')
  867. HK_UseID =  topipe('button weiw 0 gt "'localestring(MSG_Button_Use)'"')
  868. call topipe('space')
  869. HK_CancelID = topipe('button weiw 0 gt "'localestring(MSG_Button_Cancel)'"')
  870. call topipe(le)
  871. call topipe(le)
  872.  
  873. call topipe('commodity cxname T.H.E. cxtitle="T.H.E. (c) by Nils Görs" cxdesc="'localestring(MSG_TitleName)' unique cxhotkey="ctrl alt t"')
  874.  
  875. /*open the GUI window*/
  876. call topipe("open")
  877.  
  878. /* now create the listview entries */
  879. call topipe('id 0 s 256')
  880. call GetToolsMenu()
  881. call GetHotkeys()
  882. call topipe('id 0 s 512')
  883. RETURN
  884.  
  885.  
  886. topipe:
  887. /* this routine does error checking on lines written to pipe.*/
  888. /*get line to output*/
  889. parse arg out
  890.  
  891. /* write to the pipe*/
  892. call writeln(ca,out)
  893.  
  894. /*get responce and parse it.*/
  895. in=readln(ca)
  896. parse var in res1 res2 .
  897.  
  898. /* if all is ok return the second part of the responce (usualy the GID)*/
  899. if res1='ok' then return(res2)
  900.  
  901. /* something went wrong, we notify the user then exit */
  902. /*show problem line and responce (reponce may be just a blank line)*/
  903. say 'error from: 'out
  904. say '  responce: ' in
  905. exit
  906.  
  907. topipe2:
  908. /* this routine does error checking on lines written to pipe.*/
  909.  
  910. /*get line to output*/
  911. parse arg out
  912.  
  913. /* write to the pipe*/
  914. call writeln(ca,out)
  915.  
  916. /*get responce and parse it.*/
  917. in=readln(ca)
  918. parse var in res1 res2 .
  919. return(res1)
  920.  
  921. /*
  922.   my very personal ARexx host
  923. */
  924. RxHost:
  925.     call topipe2("rc 0")
  926. SELECT
  927.     WHEN in2 = 0 THEN call topipe('id 0 s 64')        /* uniconify */
  928.     WHEN in2 = 1 THEN call topipe('id 0 s 32')        /* iconify */
  929.     WHEN in2 = 2 THEN CALL MYEXIT(0)            /* quit */
  930.     WHEN in2 = 3 THEN call topipe('id 0 s 1')        /* activate */
  931.     WHEN in2 = 4 THEN call topipe('id 0 s 2')        /* window to front */
  932.     WHEN in2 = 5 THEN call topipe('id 0 s 4')        /* window to back */
  933. OTHERWISE
  934.     call topipe2("rc 5")
  935. END
  936. RETURN
  937.  
  938. /* my very own commodity */
  939. commodity:
  940. SELECT
  941.     WHEN in2='show' then call iconify(0)
  942.     WHEN in2='hide' then call iconify(1)
  943.     WHEN in2='kill' then EXIT
  944.     WHEN in2='hotkey' then call iconify(0)
  945. OTHERWISE
  946. END
  947. RETURN
  948.  
  949. MyExit:
  950. CALL CLOSECATALOG(catalog)
  951. EXIT
  952. /*
  953. */
  954. GetToolsMenu:
  955. GETATTR MENUCOMMANDS.COUNT
  956. ToolsMenu.0 = result
  957.  
  958. call topipe('id 'TM_ListViewID 'list 0')
  959.  
  960. DO i = 0 to ToolsMenu.0 -1
  961.     GETATTR MENUCOMMANDS.i.NAME
  962.     mt_name = result
  963.     GETATTR MENUCOMMANDS.i.TITLE
  964.     mt_title = result
  965.     GETATTR MENUCOMMANDS.i.SHORTCUT
  966.     mt_shortcut = result
  967.     GETATTR MENUCOMMANDS.i.COMMAND
  968.     mt_command = result
  969.     /* get the GID of the node, save the contents of the node for further reference. */
  970.     Node_ID = topipe('id 'TM_ListViewID 'addnode gt "'mt_name'|'mt_title'|'mt_shortcut'|'mt_command'" page 'pageid)
  971.  
  972.     CALL WriteTMStem()
  973. END
  974. call topipe('id 'TM_ListViewID 'list 1 page' pageid)
  975. RETURN
  976.  
  977. GetHotkeys:
  978. GETATTR KEYCOMMANDS.COUNT
  979. Hotkeys.0 = result
  980. call topipe('id 'HK_ListViewID 'list 0')
  981. DO i = 0 to Hotkeys.0 -1
  982.     GETATTR KEYCOMMANDS.i.NAME
  983.     hk_name = result
  984.     GETATTR KEYCOMMANDS.i.KEY
  985.     hk_key = result
  986.     GETATTR KEYCOMMANDS.i.COMMAND
  987.     hk_command = result
  988.  
  989.     /* get the GID of the node, save the contents of the node for further reference. */
  990.     Node_ID = topipe('id 'HK_ListViewID 'addnode gt "'hk_name'|'hk_key'|'hk_command'" page 'pageid)
  991.     call writeHKStem()
  992. END
  993. call topipe('id 'HK_ListViewID 'list 1 page' pageid)
  994. RETURN
  995.  
  996. WriteTMStem:
  997.     TM_name.Node_ID=mt_name
  998.     TM_title.Node_ID=mt_title
  999.     TM_Shortcut.Node_ID=mt_shortcut
  1000.     call parseTMArgs()            /* write command and args */
  1001.  
  1002.     TM_counter = TM_counter + 1
  1003.     TM_Entries = TM_Entries Node_ID        /* add GID to TM_entries */
  1004. RETURN
  1005.  
  1006. TMClearStrings:
  1007.     CALL topipe('id 'TM_StringNameID ' dis='TMGadStatus 'gt ""')
  1008.     CALL topipe('id 'TM_StringTitleID' dis='TMGadStatus 'gt ""')
  1009.     CALL topipe('id 'TM_StringShortCutID' dis='TMGadStatus 'gt ""')
  1010.     CALL topipe('id 'TM_GetFileID' dis='TMGadStatus 'fn "rexx:"')
  1011.     CALL topipe('id 'TM_StringArgsID' dis='TMGadStatus 'gt ""')
  1012.     TM_StringNameValue    = ""
  1013.     TM_StringTitleValue    = ""
  1014.     TM_StringShortcutValue    = ""
  1015.     TM_StringCommandValue    = "rexx:"
  1016.     TM_StringArgsValue    = ""
  1017. RETURN
  1018.  
  1019. WriteHKStem:
  1020.     HK_Name.Node_ID = HK_name
  1021.     HK_Key.Node_ID = HK_Key
  1022.     call parseHKArgs()            /* write command and args */
  1023.  
  1024.     HK_counter = HK_counter + 1
  1025.     HK_Entries = HK_Entries Node_ID        /* add GID to HK_entries */
  1026. RETURN
  1027.  
  1028. HKClearStrings:
  1029.     CALL topipe('id 'HK_StringNameID 'dis='HKGadStatus 'gt ""')
  1030.     CALL topipe('id 'HK_StringHotKeyID 'dis='HKGadStatus 'gt ""')
  1031.     CALL topipe('id 'HK_GetFileID 'dis='HKGadStatus 'fn "rexx:"')
  1032.     CALL topipe('id 'HK_StringArgsID 'dis='HKGadStatus 'gt ""')
  1033.     call topipe('id 'HK_GetFileID' dis='HKGadStatus)
  1034.  
  1035.     HK_StringNameValue    = ""
  1036.     HK_StringHotKeyValue    = ""
  1037.     HK_StringCommandValue    = "rexx:"
  1038.     HK_StringArgsValue    = ""
  1039.  
  1040. RETURN
  1041.  
  1042. _Save:
  1043. IF TM_counter = 0 & HK_counter = 0 THEN RETURN
  1044. CALL OPEN(file,scriptname,write)
  1045. CALL WRITELN(file,"/*"localestring(MSG_Created)" T.H.E.*/"||NL||"ADDRESS WORKBENCH")
  1046.  
  1047. IF HK_counter >0 THEN DO
  1048.     DO i = 1 to WORDS(HK_entries)
  1049.         val = WORD(HK_entries,i)
  1050.         IF HK_Args.val ~= "" THEN commandArgs = HK_Command.val HK_Args.val
  1051.                         ELSE commandArgs = HK_Command.val||HK_Args.val
  1052.         commandArgs = STRIP(commandArgs,B)
  1053.         CALL WRITELN(file,KEYBOARD ADD NAME '''"'||HK_Name.val||'"''' KEY '''"'||HK_Key.val||'"''' CMD '"'||commandArgs||'"')
  1054.     END
  1055. END
  1056.  
  1057. IF TM_counter >0 THEN DO
  1058. CALL WRITELN(file,"")
  1059.     DO i = 1 to WORDS(tm_entries)
  1060.         val = WORD(tm_entries,i)
  1061.         IF TM_Args.val ~= "" THEN commandArgs = TM_Command.val TM_Args.val
  1062.                         ELSE commandArgs = TM_Command.val||TM_Args.val
  1063.         commandArgs = STRIP(commandArgs,B)
  1064.  
  1065.     IF TM_Shortcut.val = "" THEN CALL WRITELN(file,MENU ADD NAME '''"'||TM_name.val||'"''' TITLE '''"'||TM_title.val||'"''' CMD '"'||commandArgs||'"')
  1066.                     ELSE CALL WRITELN(file,MENU ADD NAME '''"'||TM_name.val||'"''' TITLE '''"'||TM_title.val||'"''' SHORTCUT '"'||TM_Shortcut.val||'"' CMD '"'||commandArgs||'"')
  1067.         END
  1068. END
  1069. CALL CLOSE(file)
  1070. RETURN
  1071.  
  1072. _RemoveMenuHotkeys:
  1073.     GETATTR KEYCOMMANDS.COUNT
  1074.     clearkey = result
  1075.     DO i = clearKey - 1 to 0 BY - 1
  1076.         GETATTR KEYCOMMANDS.i.NAME
  1077.         name1 = result
  1078.         KEYBOARD NAME '"'||name1||'"' REMOVE
  1079.     END
  1080.  
  1081.     GETATTR MENUCOMMANDS.COUNT
  1082.     clearMenu = result
  1083.     DO i = clearMenu - 1 to 0 BY - 1
  1084.         GETATTR MENUCOMMANDS.i.NAME
  1085.         name1 = result
  1086.         MENU NAME '"'||name1||'"' REMOVE
  1087.     END
  1088. RETURN
  1089.  
  1090. _UpdateTMStrings:
  1091. PARSE ARG val
  1092. /* update gui for current node */
  1093. IF FIND(tm_entries,val) = 0 THEN RETURN
  1094. call topipe('id 'TM_StringNameID' dis='TMGadStatus 'gt "'TM_name.val'" ref')
  1095. call topipe('id 'TM_StringTitleID' dis='TMGadStatus 'gt "'TM_title.val'" ref')
  1096. call topipe('id 'TM_StringShortcutID' dis='TMGadStatus 'gt "'TM_shortcut.val'" ref')
  1097. call topipe('id 'TM_GetFileID' dis='TMGadStatus 'fn "'TM_command.val'" ref')
  1098. call topipe('id 'TM_StringArgsID' dis='TMGadStatus 'gt "'TM_Args.val'" ref')
  1099. RETURN
  1100.  
  1101. _UpdateHKStrings:
  1102. PARSE ARG val
  1103. /* update gui for current node */
  1104. IF FIND(hk_entries,val) = 0 THEN RETURN
  1105. call topipe('id 'HK_StringNameID' dis='HKGadStatus 'gt "'HK_name.val'" ref')
  1106. call topipe('id 'HK_StringHotKeyID' dis='HKGadStatus 'gt "'HK_Key.val'" ref')
  1107. call topipe('id 'HK_GetFileID' dis='HKGadStatus 'fn "'HK_command.val'" ref')
  1108. call topipe('id 'HK_StringArgsID' dis='HKGadStatus 'gt "'HK_Args.val'" ref')
  1109. RETURN
  1110.  
  1111. SwapTM:
  1112. TM_name.bak1 = TM_Name.prevEntry
  1113. TM_name.bak2 = TM_Name.TM_currentnode
  1114. TM_Title.bak1 = TM_Title.prevEntry 
  1115. TM_Title.bak2 = TM_Title.TM_currentnode 
  1116. TM_ShortCut.bak1 = TM_ShortCut.prevEntry
  1117. TM_ShortCut.bak2 = TM_ShortCut.TM_currentnode
  1118. TM_Command.bak1 = TM_Command.prevEntry
  1119. TM_Command.bak2 = TM_Command.TM_currentnode
  1120. TM_Args.bak1 = TM_Args.prevEntry
  1121. TM_Args.bak2 = TM_Args.TM_currentnode
  1122.  
  1123. TM_Name.prevEntry        = TM_name.bak2
  1124. TM_Name.TM_currentnode        = TM_name.bak1
  1125. TM_Title.prevEntry        = TM_Title.bak2
  1126. TM_Title.TM_currentnode        = TM_Title.bak1
  1127. TM_ShortCut.prevEntry        = TM_ShortCut.bak2
  1128. TM_ShortCut.TM_currentnode    = TM_ShortCut.bak1
  1129. TM_Command.prevEntry        = TM_Command.bak2
  1130. TM_Command.TM_currentnode    = TM_Command.bak1
  1131. TM_Args.prevEntry        = TM_Args.bak2
  1132. TM_Args.TM_currentnode        = TM_Args.bak1
  1133.  
  1134. call topipe2('id 'TM_ListViewID' list 0')
  1135. IF TM_Args.TM_currentnode ~= "" THEN commandArgs = TM_Command.TM_currentnode TM_Args.TM_currentnode
  1136.                 ELSE commandArgs = TM_Command.TM_currentnode||TM_Args.TM_currentnode
  1137. call topipe('id 'TM_currentnode' gt "'TM_Name.TM_currentnode'|'TM_title.TM_currentnode'|'TM_ShortCut.TM_currentnode'|'commandArgs'"')
  1138.  
  1139. IF TM_Args.prevEntry    ~= "" THEN commandArgs = TM_Command.prevEntry TM_Args.prevEntry
  1140.                 ELSE commandArgs = TM_Command.prevEntry||TM_Args.prevEntry
  1141. call topipe('id 'prevEntry' gt "'TM_Name.prevEntry'|'TM_title.prevEntry'|'TM_ShortCut.prevEntry'|'commandArgs'"')
  1142. call topipe2('id 'TM_ListViewID' list 1 page' pageid)
  1143. RETURN
  1144.  
  1145. ShellResult:
  1146. PARSE ARG ShellCmd
  1147. cmdid='req'pragma('id')
  1148. address command 'rxset' cmdid Shellcmd
  1149. from_Shell=getclip(cmdid)
  1150. call setclip(cmdid,'')
  1151. RETURN(from_Shell)
  1152.  
  1153. parseTMArgs:
  1154. IF LEFT(mt_command,1) = "'" | LEFT(mt_command,1) = '"' THEN DO
  1155.         TM_command.Node_ID=""
  1156.         TM_Args.Node_ID   = mt_command
  1157. RETURN
  1158. END
  1159.  
  1160.     IF WORDS(mt_command) >1 THEN DO            /* more than one word? */
  1161.         firstchar= INDEX(mt_command,":")
  1162.         IF firstchar = 0 THEN firstchar = 1
  1163.         firstArg = INDEX(mt_command," ",firstchar)
  1164.         IF firstArg = 0 THEN firstArg = 1
  1165.             TM_command.Node_ID= SUBSTR(mt_command,1,firstArg-1)
  1166.             TM_Args.Node_ID   = RIGHT(mt_command,LENGTH(mt_command)-firstArg)
  1167.     END
  1168.     ELSE DO
  1169.         TM_command.Node_ID=mt_command
  1170.         TM_Args.Node_ID   = ""
  1171.     END
  1172. RETURN
  1173.  
  1174. parseHKArgs:
  1175. IF LEFT(hk_command,1) = "'" | LEFT(hk_command,1) = '"' THEN DO
  1176.         HK_command.Node_ID=""
  1177.         HK_Args.Node_ID   = hk_command
  1178. RETURN
  1179. END
  1180.     IF WORDS(hk_command) >1 THEN DO            /* more than one word? */
  1181.         firstchar= INDEX(hk_command,":")
  1182.         IF firstchar = 0 THEN firstchar = 1
  1183.         firstArg = INDEX(hk_command," ",firstchar)
  1184.         IF firstArg = 0 THEN firstArg = 1
  1185.             HK_command.Node_ID= SUBSTR(hk_command,1,firstArg-1)
  1186.             HK_Args.Node_ID   = RIGHT(hk_command,LENGTH(hk_command)-firstArg)
  1187.     END
  1188.     ELSE DO
  1189.         HK_command.Node_ID=hk_command
  1190.         HK_Args.Node_ID   = ""
  1191.     END
  1192. RETURN
  1193.  
  1194. _DisableTMGads:
  1195. PARSE ARG TMGadStatus
  1196.     IF TMGadStatus.bak = TMGadStatus THEN RETURN
  1197.     call topipe('id 'TM_RemoveID' dis='TMGadStatus 'ref')
  1198.     call topipe('id 'TM_CloneID ' dis='TMGadStatus 'ref')
  1199.     call topipe('id 'TM_UpID' dis='TMGadStatus 'ref')
  1200.     call topipe('id 'TM_DownID' dis='TMGadStatus 'ref')
  1201.     TMGadStatus.bak = TMGadStatus
  1202. RETURN
  1203.  
  1204. _DisableHKGads:
  1205. PARSE ARG HKGadStatus
  1206.     IF HKGadStatus.bak = HKGadStatus THEN RETURN
  1207.     call topipe('id 'HK_RemoveID 'dis='HKGadStatus 'ref')
  1208.     call topipe('id 'HK_CancelBoxID' dis='HKGadStatus 'ref')
  1209.     call topipe('id 'HK_ChooserID' dis='HKGadStatus 'ref')
  1210.     call topipe('id 'HK_CloneID' dis='HKGadStatus 'ref')
  1211.     HKGadStatus.bak = HKGadStatus
  1212. RETURN
  1213.  
  1214. BuildInLanguage:
  1215. /*
  1216. ** $VER: THE.strings 1.0 (14.10.99) ©1999 by Nils Görs
  1217. */
  1218. MSG_MAIN_ToolsMenu = 0
  1219. MSG_MAIN_HotkeyMenu = 1
  1220. MSG_TM_ToolsMenu = 2
  1221. MSG_HK_Hotkey = 3
  1222. MSG_TM_LV_Title = 4
  1223. MSG_HK_LV_Title = 5
  1224. MSG_Button_Add = 6
  1225. MSG_Button_Remove = 7
  1226. MSG_Button_Up = 8
  1227. MSG_Button_Down = 9
  1228. MSG_Button_Save = 10
  1229. MSG_Button_Use = 11
  1230. MSG_Button_Cancel = 12
  1231. MSG_String_Name = 13
  1232. MSG_String_Command = 14
  1233. MSG_String_Title = 15
  1234. MSG_String_ShortCut = 16
  1235. MSG_String_HotKey = 17
  1236. MSG_New_Name = 18
  1237. MSG_New_Title = 19
  1238. MSG_New_Hotkey = 20
  1239. MSG_TitleName = 21
  1240. MSG_Created = 22
  1241. MSG_MenuT_Project = 23
  1242. MSG_Menu_About = 24
  1243. MSG_Menu_Quit = 25
  1244. MSG_Request_Quit = 26
  1245. MSG_Request_YES = 27
  1246. MSG_String_Argument = 28
  1247. MSG_MenuT_Edit = 29
  1248. MSG_Menu_Remove = 30
  1249. MSG_Menu_LastSaved = 31
  1250. MSG_Button_Clone = 32
  1251. MSG_TooManyEntries = 33
  1252.  
  1253. strings.0 = "_Tools Menu"
  1254. strings.1 = "_Hotkey Menu"
  1255. strings.2 = "Tools Menu"
  1256. strings.3 = "Hotkeys"
  1257. strings.4 = "Name|Title|SC|Command"
  1258. strings.5 = "Name|Key|Command"
  1259. strings.6 = "_Add"
  1260. strings.7 = "_Remove"
  1261. strings.8 = "U_p"
  1262. strings.9 = "_Down"
  1263. strings.10= "_Save"
  1264. strings.11= "_Use"
  1265. strings.12= "_Cancel"
  1266. strings.13= "_Name:"
  1267. strings.14= "Co_mmand:"
  1268. strings.15= "T_itle:"
  1269. strings.16= "Sh_ortCut:"
  1270. strings.17= "_Key:"
  1271. strings.18= "Edit Name"
  1272. strings.19= "Edit Title"
  1273. strings.20= "select Hotkey"
  1274. strings.21= "Workbench Tools-Menu and Hotkey Editor"
  1275. strings.22= "Created with"
  1276. strings.23= "Project"
  1277. strings.24= "@?About"
  1278. strings.25= "@QQuit"
  1279. strings.26= "Are you sure to quit?"
  1280. strings.27= "Yes|No"
  1281. strings.28= "Ar_guments:"
  1282. strings.29= "Edit"
  1283. strings.30= "@RRemove All"
  1284. strings.31= "@LLast Saved"
  1285. strings.32= "Dup_lication"
  1286. strings.33= "Sorry, only 63 menu items will fit into the Tools menu."
  1287. RETURN
  1288.